#ifndef __SYMBOL_TABLE_H_
#define __SYMBOL_TABLE_H_

#include <stdint.h>

typedef struct _symbol_list_st symbol_list_st;

typedef struct _symbol_table_st symbol_table_st;
struct _symbol_table_st
{
    symbol_list_st *symbol_list;        //!< 符号链表
    struct _symbol_table_st *parent;    //!< 上级符号表
    struct _symbol_table_st *child;     //!< 下级符号表
    struct _symbol_table_st *next;      //!< 兄弟符号表
};

typedef struct _root_symbol_table_st root_symbol_table_st;
struct _root_symbol_table_st
{
    symbol_table_st *root;              //!< 根符号表
    symbol_table_st *cur;               //!< 当前作用域的符号表
    symbol_table_st *last_child;        //!< 上次访问的子作用域
};

void root_symbol_table_free(
    root_symbol_table_st *root_symbol_table);

root_symbol_table_st *root_symbol_table_malloc(void);

int32_t symbol_table_test(void);

#endif